//
//  BCUserLoginManager.h
//  GSBlockChain
//
//  Created by guoshikeji_a on 2018/12/25.
//  Copyright © 2018 guoshikeji. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
/**
 管理用户登录
 纪录下在设备上 登录过的用户 以便在设备上登录切换用户
 */
@interface BCUserLoginManager : NSObject
/**
 单例
 */
+ (instancetype)sharedLogin;

/**
 更新最后登录用户到loginInfos 异步更新
 */
- (void)updateLastLoginUserToInfos:(UserInfoModel *)userInfo;

#pragma mark - 一些需要用来用户操作的数据

/**
 *userInfo 最近一次登录成功的用户信息 可能为空 注意保护
 */
@property (nonatomic, weak, readonly) UserInfoModel *lastUserInfo;

/**
 *loginedUserInfos 当前所有登录过的用户信息
 */
@property (nonatomic, weak, readonly) NSArray <UserInfoModel *> *loginedUserInfos;

#pragma mark - 指纹登录或者面容登录处理 都需要与user对应
/**
 * !@brief 判断用户是否可以指纹或面容登录
 * @param userId 用户id
 * @return 是否可以
 */
- (BOOL)isOpenLocalAuthenticationWithUserId:(NSString *)userId;

/**
 * !@brief 随机获取一个用户指纹或面容登录码 以供保存 不要传入空值
 * @param userId 用户id
 * @param password 用户在设置登录码时输入的登录密码
 * @return 一个新的登录码 在服务器设置成功后保存到keyChain中就算卸载重装也不会重置
 */
- (NSString *)userInitLocalAuthenticationCode:(NSString *)userId password:(NSString *)password;

/**
 * !@brief 给用户设置一个登录码进keychain
 * @param code 登录码
 * @param userId 用户
 * @param error 如果设置发生错误 返回
 * @return 是否成功
 */
- (BOOL)setCurrentUserLoacalAuthenticationCode:(NSString *)code userId:(NSString *)userId error:(NSError **)error;

/**
 * !@brief 获取当前用户关联指纹或面容登录码
 * @param userId 用户
 * @return 当前用户的登录码 nil 则还未开启
 */
- (NSString *)getCurrentUserLoacalAuthenticationCode:(NSString *)userId;
/**
 * !@brief 删除当前用户关联指纹或面容登录码
 * @param userId 用户
 * @return 当前用户的登录码是否删除
 */
- (BOOL)deleteCurrentUserLocalAuthticationCode:(NSString *)userId;

@end

NS_ASSUME_NONNULL_END
